{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 04 - Full Waveform Inversion with Devito and Dask"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this tutorial, we will build on the [previous](https://github.com/devitocodes/devito/blob/master/examples/seismic/tutorials/03_fwi.ipynb) FWI tutorial and implement parallel versions of both forward modeling and FWI objective functions. Furthermore, we will show how our parallel FWI function can be passed to black-box third party optimization libraries, such as SciPy's [optimize](https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html) package, to access sophisticated optimization algorithms without having to implement them from scratch!\n",
    "\n",
    "To implement parallel versions of forward modeling and FWI, we will use [Dask](https://dask.pydata.org/en/latest/#dask), a Python library for distributed computing based on parallel data structures and task-based programming. As computing multiple seismic shot records or gradients for subsequent source locations is an embarassingly parallel process, we will use Dask to dynamically distribute our workload to a pool of available workers and afterwards collect the results.\n",
    "\n",
    "The first part of this tutorial closely follows [tutorial 3](https://github.com/devitocodes/devito/blob/master/examples/seismic/tutorials/03_fwi.ipynb) and consists of reading the velocity model and setting up the acquisition geometry. Subsequently, we will implement serial versions of forward modeling and FWI objective functions and then show how we can use Dask to implement parallel versions of these functions. Finally, we will show how to write a wrapper that lets us pass our objective function to scipy's optimize package and how to run a small 2D FWI example using a limited-memory Quasi-Newton method."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Set up velocity models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As before, we start by reading the true (i.e. unknown) velocity model, as well as the starting model for FWI. For our example, we once again use the 2D Camembert model with a transmission acquisition set up, which involves having sources on one side of the model and receivers on the other side.\n",
    "\n",
    "In reality, we obvisouly cannot know what the true velocity is, but here we use the true model to generate our own data (inverse crime alert!) and to compare it to our FWI result."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "tags": [
     "nbval-ignore-output"
    ]
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Operator `initdamp` run in 0.01 s\n",
      "Operator `padfunc` run in 0.01 s\n",
      "Operator `initdamp` run in 0.01 s\n",
      "Operator `padfunc` run in 0.01 s\n"
     ]
    }
   ],
   "source": [
    "from examples.seismic import demo_model\n",
    "\n",
    "# Set up velocity model\n",
    "shape = (101, 101)      # Number of grid points (nx, nz).\n",
    "spacing = (10., 10.)    # Grid spacing in m. The domain size is now 1km by 1km.\n",
    "origin = (0, 0)         # Need origin to define relative source and receiver locations.\n",
    "nbl = 40\n",
    "\n",
    "# True model\n",
    "model1 = demo_model('circle-isotropic', vp_circle=3.0, vp_background=2.5,\n",
    "    origin=origin, shape=shape, spacing=spacing, nbl=40)\n",
    "\n",
    "# Initial model\n",
    "model0 = demo_model('circle-isotropic', vp_circle=2.5, vp_background=2.5,\n",
    "    origin=origin, shape=shape, spacing=spacing, nbl=40, grid = model1.grid)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Acquisition geometry"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For the acquisition geometry, we use the same setup as in tutorial 3 and position 5 source position on one side of the model, and an array of 101 receivers on the other side. Note that now our source coordinate array (`src_coordinates`) is a 5 x 2 array, containing the shot locations of all 5 source experiments. After defining the source/receiver coordinates, we set up individual geometry objects for both the observed data (using `model`) and the predicted data (using `model0`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from examples.seismic import AcquisitionGeometry\n",
    "import numpy as np\n",
    "\n",
    "# Set up acquisiton geometry\n",
    "t0 = 0.\n",
    "tn = 1000. \n",
    "f0 = 0.010\n",
    "\n",
    "# Set up source geometry, but define 5 sources instead of just one.\n",
    "nsources = 5\n",
    "src_coordinates = np.empty((nsources, 2))\n",
    "src_coordinates[:, 1] = np.linspace(spacing[0], model1.domain_size[0] - spacing[0], num=nsources)\n",
    "src_coordinates[:, 0] = 20.  # Source depth is 20m\n",
    "\n",
    "# Initialize receivers for synthetic and imaging data\n",
    "nreceivers = 101\n",
    "rec_coordinates = np.empty((nreceivers, 2))\n",
    "rec_coordinates[:, 1] = np.linspace(spacing[1], model1.domain_size[0] - spacing[1], num=nreceivers)\n",
    "rec_coordinates[:, 0] = 980.    # Receiver depth\n",
    "\n",
    "# Set up geometry objects for observed and predicted data\n",
    "geometry1 = AcquisitionGeometry(model1, rec_coordinates, src_coordinates, t0, tn, f0=f0, src_type='Ricker')\n",
    "geometry0 = AcquisitionGeometry(model0, rec_coordinates, src_coordinates, t0, tn, f0=f0, src_type='Ricker')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Forward modeling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before diving into FWI, we will start with forward modeling and show how we can use Dask to implement a parallel wrapper around a serial modeling function to compute seismic shot records for multiple source locations in parallel.\n",
    "\n",
    "First, we implement a forward modeling function for a single shot, which takes a geometry data structure as the only mandatory input argument. This function assumes that the geometry structure only contains a *single* source location. To solve the wave equation for the current shot location and model as specified in `geometry`, we use the `AcousticSolver` from previous tutorials, which is an abstract layer built on top of (generic) Devito objects. `AcousticSolver` contains Devito implementations of forward and adjoint wave equations, as well as Jacobians as specified in tutorials 1 and 2, so we don't have to re-implement these PDEs here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from examples.seismic.acoustic import AcousticWaveSolver\n",
    "\n",
    "# Serial modeling function\n",
    "def forward_modeling_single_shot(geometry, save=False, dt=4.0):\n",
    "    solver = AcousticWaveSolver(geometry.model, geometry, space_order=4)\n",
    "    d_obs, u0 = solver.forward(vp=geometry.model.vp, save=save)[0:2]\n",
    "    return d_obs.resample(dt), u0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With our modeling function for a single shot record in place, we now implement our parallel version of our modeling function, which consists of a loop over all source locations. As the `geometry` object in `forward_modeling_single_shot` expects only a single source location, we set up a new geometry structure for the i-th source location to pass to our modeling function. However, rather than simpling calling the modeling function for single shots, we tell Dask to create a *task* for each source location and to distribute them to the available parallel workers. Dask returns a remote reference  to the result on each worker called `future`. The `wait` statement tells our function to wait for all tasks to finish their computations, after which we collect the modeled shot records from the workers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Parallel modeling function\n",
    "def forward_modeling_multi_shots(geometry, save=False, dt=4.0):\n",
    "\n",
    "    futures = []\n",
    "    for i in range(geometry.nsrc):\n",
    "\n",
    "        # Geometry for current shot\n",
    "        geometry_i = AcquisitionGeometry(geometry.model, geometry.rec_positions, geometry.src_positions[i, :], \n",
    "            geometry.t0, geometry.tn, f0=geometry.f0, src_type=geometry.src_type)\n",
    "        \n",
    "        # Call serial modeling function for each index\n",
    "        futures.append(client.submit(forward_modeling_single_shot, geometry_i, save=save, dt=dt))\n",
    "\n",
    "    # Wait for all workers to finish and collect shots\n",
    "    wait(futures)\n",
    "    shots = []\n",
    "    for i in range(geometry.nsrc):\n",
    "        shots.append(futures[i].result()[0])\n",
    "\n",
    "    return shots"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can use this parallel modeling function to generate our own observed data set, which we will subsequently use for our FWI example. In reality, we would instead read our observed data from a SEG-Y file. To compute the data in parallel, we launch a pool of workers on our local machine and then call the parallel modeling function:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "tags": [
     "nbval-ignore-output"
    ]
   },
   "outputs": [],
   "source": [
    "from distributed import Client, LocalCluster, wait\n",
    "\n",
    "# Start Dask cluster\n",
    "cluster = LocalCluster(n_workers=nsources, death_timeout=600)\n",
    "client = Client(cluster)\n",
    "\n",
    "# Compute observed data in parallel (inverse crime). In real life we would read the SEG-Y data here.\n",
    "d_obs = forward_modeling_multi_shots(geometry1, save=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The variable `d_obs` is a list of the 5 shots records and we can plot one of the shot records as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "tags": [
     "nbval-ignore-output"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from examples.seismic import plot_shotrecord\n",
    "\n",
    "# Plot shot no. 3 of 5\n",
    "plot_shotrecord(d_obs[2].data, model1, t0, tn)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Parallel Full-Waveform Inversion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that we know how to use Dask to implement a parallel loop around a (serial) modeling function for a single shot, we can apply the same concept to an FWI objective function, which computes the FWI function value and gradient for a given geometry and observed shot record. This function follows largely the structure in tutorial 3 and involves computing the predicted data and backpropagating the residual to compute the gradient. As we do not want to update the velocity in the area of the absorbing boundaries, we only return the gradient on the (original) physical grid."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from devito import Function\n",
    "from examples.seismic import Receiver\n",
    "\n",
    "# Serial FWI objective function\n",
    "def fwi_objective_single_shot(geometry, d_obs):\n",
    "\n",
    "    # Devito objects for gradient and data residual\n",
    "    grad = Function(name=\"grad\", grid=geometry.model.grid)\n",
    "    residual = Receiver(name='rec', grid=geometry.model.grid,\n",
    "                        time_range=geometry.time_axis, \n",
    "                        coordinates=geometry.rec_positions)\n",
    "    solver = AcousticWaveSolver(geometry.model, geometry, space_order=4)\n",
    "\n",
    "    # Predicted data and residual\n",
    "    d_pred, u0 = solver.forward(vp=geometry.model.vp, save=True)[0:2]\n",
    "    residual.data[:] = d_pred.data[:] - d_obs.resample(geometry.dt).data[:][0:d_pred.data.shape[0], :]\n",
    "\n",
    "    # Function value and gradient    \n",
    "    fval = .5*np.linalg.norm(residual.data.flatten())**2\n",
    "    solver.gradient(rec=residual, u=u0, vp=geometry.model.vp, grad=grad)\n",
    "    \n",
    "    # Convert to numpy array and remove absorbing boundaries\n",
    "    grad_crop = np.array(grad.data[:])[geometry.model.nbl:-geometry.model.nbl,\n",
    "        geometry.model.nbl:-geometry.model.nbl]\n",
    "    \n",
    "    return fval, grad_crop"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As for the serial modeling function, we can call `fwi_objective_single_shot` with a geometry structure containing a single source location and a single observed shot record. Since we are interested in evaluating this function for multiple sources in parallel, we follow the strategy from our forward modeling example and implement a parallel loop over all shots, in which we create a task for each shot location. As before, we use Dask to create one task per shot location and evaluate the single-shot FWI objective function for each source. We wait for all computations to finish via `wait(futures)` and then we sum the function values and gradients from all workers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Parallel FWI objective function\n",
    "def fwi_objective_multi_shots(geometry, d_obs):\n",
    "\n",
    "    futures = []\n",
    "    for i in range(geometry.nsrc):\n",
    "\n",
    "        # Geometry for current shot\n",
    "        geometry_i = AcquisitionGeometry(geometry.model, geometry.rec_positions, geometry.src_positions[i, :], \n",
    "            geometry.t0, geometry.tn, f0=geometry.f0, src_type=geometry.src_type)\n",
    "        \n",
    "        # Call serial FWI objective function for each shot location\n",
    "        futures.append(client.submit(fwi_objective_single_shot, geometry_i, d_obs[i]))\n",
    "\n",
    "    # Wait for all workers to finish and collect function values and gradients\n",
    "    wait(futures)\n",
    "    fval = 0.0\n",
    "    grad = np.zeros(geometry.model.shape)\n",
    "    for i in range(geometry.nsrc):\n",
    "        fval += futures[i].result()[0]\n",
    "        grad += futures[i].result()[1]\n",
    "\n",
    "    return fval, grad"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can compute a single gradient of the FWI objective function for all shots by passing the geometry structure with the initial model to the objective function, as well as the observed data we generated earlier."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "tags": [
     "nbval-ignore-output"
    ]
   },
   "outputs": [],
   "source": [
    "# Compute FWI gradient for 5 shots\n",
    "f, g = fwi_objective_multi_shots(geometry0, d_obs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The physical units of the gradient are $s^2/km^2$, which means our gradient is an update of the squared slowness, rather than of the velocity."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "tags": [
     "nbval-ignore-output"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from examples.seismic import plot_image\n",
    "\n",
    "# Plot g\n",
    "plot_image(g.reshape(model1.shape), vmin=-6e3, vmax=6e3, cmap=\"cividis\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## FWI with SciPy's L-BFGS\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With our parallel FWI objective function in place, we can in principle implement a wide range of gradient-based optimization algorithms for FWI, such as (stochastic) gradient descent or the nonlinear conjugate gradient method. However, many optimization algorithms, especially second order methods or algorithms for constrained optimization, are far from trivial to implement correctly from scratch. Luckily, many optimization libraries exist that we can adapt for our purposes. \n",
    "\n",
    "Here, we demonstrate how we can interface the scipy *optimize* package to run FWI with a limited-memory Quasi-Newton method. The scipy optimize package was not specifically designed for FWI, but this does not matter, as the library accepts any Python function that can be evaluated for a current model iterate `x` and returns the function value and gradient:\n",
    "\n",
    "```\n",
    "f, g = objective_function(x, args)\n",
    "```\n",
    "\n",
    "where `f` is function value and `g` is a one-dimensional numpy array of type `float64`. Our parallel FWI function does not take the current model as an input argument, but instead expects a geometry structure and the observed data. Therefore, we have to write a little wrapper function called `loss`, which provides the input argument structure that is expected by `scipy.optimize`. The function takes the current model iteratve `x` (in squared slowness) as the first input argument and overwrites the current velocity in `geometry` with `x`. The gradient that is returned to `scipy.optimize` is converted to a numpy array of the required type (`float64`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Wrapper for scipy optimizer: x is current model in squared slowness [s^2/km^2]\n",
    "def loss(x, geometry, d_obs):\n",
    "    \n",
    "    # Convert x to velocity\n",
    "    v_curr = 1.0/np.sqrt(x.reshape(geometry.model.shape))\n",
    "    \n",
    "    # Overwrite current velocity in geometry (don't update boundary region)\n",
    "    geometry.model.vp.data[geometry.model.nbl:-geometry.model.nbl, \n",
    "        geometry.model.nbl:-geometry.model.nbl] = v_curr\n",
    "    \n",
    "    # Evaluate objective function \n",
    "    fval, grad = fwi_objective_multi_shots(geometry, d_obs)\n",
    "    return fval, grad.flatten().astype(np.float64)    # scipy expects double precision vector"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `scipy.optimize` function also takes an optional callback function as an input argument, which can be used to keep track of the model error as a function of the iteration number. The callback function takes the current model iterate `xk` as the only input argument and computes the $\\ell_2$-misfit with the true model `m`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Callback to track model error\n",
    "model_error = []\n",
    "def fwi_callback(xk):\n",
    "    vp = model1.vp.data[model1.nbl:-model1.nbl, model1.nbl:-model1.nbl]\n",
    "    m = 1.0 / (vp.reshape(-1).astype(np.float64))**2\n",
    "    model_error.append(np.linalg.norm((xk - m)/m))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The final preparation step before we can run our example, is the definition of box constraints for the velocity. At each iteration, the optimizer will project the current model iterate onto a feasible set of velocites as defined by the lower and upper bounds `vmin` and `vmax`. Box contraints allow us to prevent velocities from taking negative values or values that are too small or large for the stability criteria of our modeling stepping scheme. We define the box constraints for the velocity in $km/s$ and then convert them to squared slownesses. Furthermore, we define our initial guess `m0`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Box contraints\n",
    "vmin = 1.4    # do not allow velocities slower than water\n",
    "vmax = 4.0\n",
    "bounds = [(1.0/vmax**2, 1.0/vmin**2) for _ in range(np.prod(model0.shape))]    # in [s^2/km^2]\n",
    "\n",
    "# Initial guess\n",
    "v0 = model0.vp.data[model0.nbl:-model0.nbl, model0.nbl:-model0.nbl]\n",
    "m0 = 1.0 / (v0.reshape(-1).astype(np.float64))**2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we run our 2D FWI example by calling the `optimize.minimize` function. The first input argument is the function to be minimized, which is our `loss` function. The second input argument is the starting value, which in our case is our initial model in squared slowness. The third input argument (`args`) are the arguments that are passed to the loss function other than `x`. For this example we use the L-BFGS algorithm, a limited-memory Quasi-Newton algorithm which builds up an approximation of the (inverse) hessian as we iterate. As our `loss` function returns the analytically computed gradient (as opposed to a numerically approximated gradient), we set the argument `jac=True`. Furthermore, we pass our callback function, box constraints and the maximum number of iterations (in this case 5) to the optimizer. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy import optimize\n",
    "\n",
    "# FWI with L-BFGS\n",
    "ftol = 0.1\n",
    "maxiter = 5\n",
    "result = optimize.minimize(loss, m0, args=(geometry0, d_obs), method='L-BFGS-B', jac=True, \n",
    "    callback=fwi_callback, bounds=bounds, options={'ftol':ftol, 'maxiter':maxiter, 'disp':True})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Check termination criteria\n",
    "assert np.isclose(result['fun'], ftol) or result['nit'] == maxiter"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After either the maximum iteration number is reached or we find the minimum of the objective function within some tolerance level `ftol`, the optimizer returns a dictionary with the results and some additional information. We convert the result back to the velocity in $km/s$ and compare it to the true model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "tags": [
     "nbval-ignore-output"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot FWI result\n",
    "vp = 1.0/np.sqrt(result['x'].reshape(model1.shape))\n",
    "plot_image(model1.vp.data[model1.nbl:-model1.nbl, model1.nbl:-model1.nbl], vmin=2.4, vmax=2.8, cmap=\"cividis\")\n",
    "plot_image(vp, vmin=2.4, vmax=2.8, cmap=\"cividis\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looking at the model error as a function of the iteration number, we find that the error decays monotonically, as we would expect."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "tags": [
     "nbval-ignore-output"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Plot model error\n",
    "plt.plot(range(1, maxiter+1), model_error); plt.xlabel('Iteration number'); plt.ylabel('L2-model error')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Next steps"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In our current example, the master process keeps all shot records in memory and distributes the data to the workers in the parallel pool. This works perfectly fine for 2D and even small 3D examples, but quickly becomes infeasible for large-scale data sets. Therefore, an extension of our current code should include the following steps if we want to scale things up in the future:\n",
    "\n",
    " - Write shot records directly to disk on each worker and return a file pointer back to the master process.\n",
    " \n",
    " - Avoid sending the velocity model to the workers and read the model directly onto each worker.\n",
    " \n",
    " - Include optimal checkpointing or domain-decomposition to address the memory bottleneck in the gradient computations.\n",
    " \n",
    " \n",
    "For scaling Devito to industry-scale problems and being able to work on data sets in the range of multiple terabytes, it is furthermore necessary to have a fast SEG-Y reader that is able to scan through large data volumes and efficiently access blocks of data such as single shot records. Furthermore, we need the SEG-Y reader to be able to interact with Devito and automatically set up `geometry` objects from the SEG-Y headers. For this purpose, please check out the [Julia Devito Inversion framework (JUDI)](https://github.com/slimgroup/JUDI.jl), an extension built on top of Devito in the Julia programming language. JUDI consists on an abstract linear algebra framework and an interface to a fast and parallel SEG-Y reader called [SEGYIO.jl](https://github.com/slimgroup/SegyIO.jl), making it possible to:\n",
    "\n",
    " - Scan large-scale data sets and create look-up tables from which shot records can be directly accessed through their byte locations (no need to loop over traces or read full files).\n",
    " \n",
    " - Use look-up tables to automatically set up Devito objects with source and receiver coordinates. \n",
    " \n",
    " - Work with out-of-core data containers that only read the data into memory when it is used for computations.\n",
    " \n",
    "You can find a full FWI example of the 3D Overthrust model using a 1.1 TB large data set on [JUDI's Github page](https://github.com/slimgroup/JUDI.jl/blob/master/examples/software_paper/examples/fwi_3D_overthrust_spg.jl)."
   ]
  }
 ],
 "metadata": {
  "@webio": {
   "lastCommId": null,
   "lastKernelId": null
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
